重複メイル抽出削除スクリプト

動作内容:

・電信八号で、POP受信の失敗などにより、まったく同じメイルを重複して
 受信してしまうことがしばしばあるため、フォルダ毎にMessage-Id:およ
 びファイルサイズが同一であるメイルを探して、該当ファイルをゴミ缶に
 移動させる

動作確認環境:

 電信八号(V321.2b5以降で確認しています)
 電極Z号化計画(Version 1.33で確認しています)
 (同プラグイン)外部プログラム実行(Version 1.11で確認しています)
 Perlが動作する環境

使用方法:

 1.下のスクリプトをコピーし、適当な名前で保存する
    例:dtcovlp.pl
   その際、2行目の記述を適宜書き換えて下さい。
    $tra="d:/program/den8/denshin8/TRASH/";
     ...ゴミ缶フォルダのパス(絶対パスのみ)
      「TRASH.CAN」ではありません、ご注意下さい
    (注)パス区切りは‘\’ではなく‘/’で指定します

 2.電極Z号化計画−外部プログラム実行 にプログラムの追加を行う
    例:(パスは必要に応じてご変更ください)

     「外部プログラム(フォルダメニュー用)の編集」への登録
     ・メニュー表示文字列:重複メールの削除
     ・実行するプログラム:perl dtcovlp.pl %d
     ・表示条件:常に
     ・プログラム終了時にフォルダ表示を更新する:チェック

判っている不具合および改善を要す箇所:

 ゴミ缶への移動時に、9999.TXTを超過した分は仮のファイル名をつけま
 す(「XXXX-1.TXT」等)。電信八号から認識されずに残ったままになり
 ますので、適宜手動で処理を行う必要があります。
 また、操作時に、ゴミ缶のキャッシュが自動で更新されません。

謝辞:

 最後になりましたが、電信八号を開発された石岡さんと電八倶楽部のみ
 なさん、電極Z号化計画およびプラグインを開発された山田さんにこの
 場を借りてお礼申し上げます。
 いつも便利に使用させて頂き、ありがとうございます。こんな素晴らし
 いソフトをフリーで公開して下さっているなんて、本当に感激です。
 また、本スクリプトを記述するにあたり、超初心者的な質問にも丁寧に
 アドバイス下さったおさまさくんに、併せてお礼申し上げます。


付録:

 電信八号オフィシャルサイト http://denshin8.esprix.net/
 山田さんのホームページ http://www.kh.rim.or.jp/~s-yamada/


以上です。拙文をわざわざお読み頂き、ありがとうございました。

-- 
Osamu Ogawa / 小川 修
mailto:jikoman@ogawa.8k.com

# dtcovlp.pl 2000-11-01 $tra="d:/program/den8/denshin8/TRASH/"; # Write your TRASH's path (not TRASH.CAN) $fol=&dchange($ARGV[0])."/"; @msg=(); @tnm=(); opendir(DIR,$fol); while ($file = readdir(DIR)) { if (&small($file)=~/^[0-9][0-9][0-9][0-9].txt$/) { open(INI,$fol.$file); @lines=<INI>; close(INI); ($size)=(stat($fol.$file))[7]; for(;;){ $cur=shift(@lines); if(&small($cur)=~/^message-id: /){ push(@msg,substr($cur,12,length($cur)-13).$size."\t".$file."\n"); last; } if ($cur eq "--------\n") { push(@msg,substr($cur,8).$file.$size."\t".$file."\n"); last; } if ($cur eq "\n") { push(@msg,"NOTHING".$file.$size."\t".$file."\n"); last; } } } } closedir(DIR); unless(@msg){ exit; } @result=sort(@msg); opendir(DIR,$tra); while ($file = readdir(DIR)) { if (&small($file)=~/^[0-9][0-9][0-9][0-9].txt$/) { push(@tnm,substr($file,0,4)."\n"); } } closedir(DIR); if(@tnm){ @tso=sort(@tnm); $tln=pop(@tso)+1; }else{ $tln=0; } $mid1=substr(shift(@result),0,length($msg1)-10); $tlo=""; while ($msg2=shift(@result)) { $mid2=substr($msg2,0,length($msg1)-10); if ($mid1 eq $mid2) { if ($tln > 9999) { $tlo="-".substr($tln,0,length($tln)-4); } $tls=substr("d000".$tln,length($tln)).$tlo.".TXT"; system 'move '.&dcrev($fol.substr($msg2,-9,8)).' '.&dcrev($tra.$tls); $tln=$tln+1; } else { $mid1=$mid2; } } exit(0); sub small { my($a)=@_; $a=~tr/A-Z/a-z/; $a; } sub dcrev { my($a)=@_; $a=~s/\//\\/g; $a; } sub dchange { my($a)=@_; $a=~s/\\/\//g; $a; }
まえにもどる